/**
 * 
 */
package cn.nawang.ebeim.client.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

/**
 * @ClassName: PropertiesUtil
 * @Description: 读取配置文件工具类
 * @author 张建峰
 * @date 2015年8月20日 下午2:03:03
 * @version v1.0
 */
public class PropertiesUtil {

  public static void main(String[] args) throws Exception {
    // System.out.println(readAll());
    // System.out.println(PropertiesUtil.getConfPath());
     System.out.println(read("working.path"));
//    writeProperties("customer.id", "da2f909b-be8b-4bf1-bff8-a91754689d81");
  }

  public static String getConfPath(){
    File rootDir = new File(PathUtil.getClassPath());
    return rootDir+"/others/conf/config.properties";
//    return rootDir+"/conf/config.properties";
  }

  // 配置文件路径
  public static final String PROPERTIES_FILE_PATH = "/resources/config.properties";

  public static String read(String key) {
    Properties props = new Properties();
    InputStream in = null;
    try {
      // 从目录“程序目录/conf”下加载配置文件
      File rootDir = new File(PathUtil.getClassPath());
      String confPath =  getConfPath();//生成exe的时候要放开，调试的时候注释掉 
      confPath = java.net.URLDecoder.decode(confPath,"utf-8");//
      in = new FileInputStream(new File(confPath));
      props.load(in);
      String value = props.getProperty(key);
      in.close();
      return value;
    } catch (Exception e) {
      e.printStackTrace();
      if (in != null) {
        try {
          in.close();
        } catch (IOException e1) {
          e1.printStackTrace();
        }
      }
      return null;
    }
  }

  public static Map<String, String> readAll() throws Exception {
    Properties props = new Properties();
    Map<String, String> map = null;
    
    
    // 从目录“程序目录/conf”下加载配置文件
    File rootDir = new File(PathUtil.getClassPath());
    String confPath =  getConfPath();//生成exe的时候要放开，调试的时候注释掉 
    confPath = java.net.URLDecoder.decode(confPath,"utf-8");//
    InputStream in = new FileInputStream(new File(confPath));
    props.load(in);
    Enumeration en = props.propertyNames();
    map = new HashMap<String, String>();
    while (en.hasMoreElements()) {
      String key = (String) en.nextElement();
      String Property = props.getProperty(key);
      map.put(key, Property);
    }
    return map;
  }

  public static void writeProperties(String parameterName, String parameterValue) throws Exception {
    Properties prop = new Properties();
    Map<String, String> map = null;
    // 从目录“程序目录/conf”下加载配置文件
    File rootDir = new File(PathUtil.getClassPath());
    String confPath =  getConfPath();//生成exe的时候要放开，调试的时候注释掉 
    confPath = java.net.URLDecoder.decode(confPath,"utf-8");//
    try {
      InputStream fis = new FileInputStream(confPath);
      // 从输入流中读取属性列表（键和元素对）
      prop.load(fis);
      // 调用 Hashtable 的方法 put。使用 getProperty 方法提供并行性。
      // 强制要求为属性的键和值使用字符串。返回值是 Hashtable 调用 put 的结果。
      OutputStream fos = new FileOutputStream(confPath);
      prop.setProperty(parameterName, parameterValue);
      // 以适合使用 load 方法加载到 Properties 表中的格式，
      // 将此 Properties 表中的属性列表（键和元素对）写入输出流
      prop.store(fos, "Update '" + parameterName + "' value");
    } catch (IOException e) {
      System.err.println("Visit " + confPath + " for updating " + parameterName + " value error");
    }
  }

}
